package com.wiiss.ams.cron;

import cn.hutool.core.util.StrUtil;
import cn.hutool.cron.CronUtil;
import com.wiiss.ams.cron.task.ScheduleTask;
import com.wiiss.ams.cron.task.configurator.CronConfigurator;
import com.wiiss.ams.util.Cache;
import com.wiiss.ams.util.Exc;

/**
 * 定时任务类
 * @author 52291590 2022年11月24日 上午10:08:47
 */
public class Scheduler {

	public static void schedule(ScheduleTask scheduleTask) {
		CronUtil.schedule(scheduleTask.getCron().getExpression(), scheduleTask);
	}

	public static void launch() {
		try {
			((CronConfigurator) Class.forName("com.wiiss.ams.cron.task.configurator." + StrUtil.upperFirst(Cache.get("factory", String.class)) + "CronConfigurator")
				.getDeclaredConstructor().newInstance()).configure();
		} catch (Exception e) {
			throw new Exc(e, "找不到定时任务的配置类");
		}

		CronUtil.setMatchSecond(true); // 支持秒级别定时任务 因为cron是quartz风格
		CronUtil.start();
	}

}
